import axios from "axios";  //引入axios
import env from "@/api/env.js";
import merge from 'lodash/merge';
import {Message, MessageBox} from 'element-ui'
import router from "@/router";
import qs from "qs";
import {httpBaseUrl} from "@/util/globa";
// 创建axios实例

const service = axios.create({
    // baseUrl: env.dev.baseUrl
    baseURL: httpBaseUrl,
    headers: { //请求头headers
        'Content-Type': 'application/json;charset=UTF-8',
        'Authorization': `Bearer ${sessionStorage.getItem('token')}`
    },
    settimeout: 50000,//超时时间
    loading: true,
});
// 请求拦截器
service.interceptors.request.use(
    config => {
      // 在发送请求之前做些什么 验证token之类的
      const token = sessionStorage.getItem("token")
      if (token) {
        config.headers['Authorization'] = `Bearer ${token}`
      }
      return config; //记得一定要 返回config
    },
    error => {
      // 对请求错误做些什么
      // console.log("请求的数据:", error);
      return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    response => {
      console.log(response)
        if (response.data.code === 401) {
            Message({
                message: response.data.message,
                type: 'error',
                duration: 3 * 1000
            })
            MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
                confirmButtonText: '重新登录',
                cancelButtonText: '取消',
                type: 'warning'
            }).then(() => {
                localStorage.removeItem('token') // 移除token，跳转至登录
                localStorage.removeItem("userInfo")
                router.push("/login")
                // store.dispatch('FedLogOut').then(() => {
                //   location.reload()// 为了重新实例化vue-router对象 避免bug
                //   return;
                // })
                return Promise.reject('error')
            })
        } else {
            return response.data
        }
        return;
    },
    error => {
      console.log(error)
        // 对响应错误做点什么
        return Promise.reject(error);
    }
);
service.adornUrl = (actionName) => {
    // console.log(env.dev.baseUrl + actionName)
    return env.dev.baseUrl + actionName
}

service.adornParams = (params = {}, openDefaultParams = true) => {
    var defaults = {
        't': new Date().getTime()
    }
    return openDefaultParams ? merge(defaults, params) : params
}

/**
 * post请求数据处理
 * @param {*} data 数据对象
 * @param {*} openDefaultData 是否开启默认数据?
 * @param {*} contentType 数据格式
 *  json: 'application/json; charset=utf-8'
 *  form: 'application/x-www-form-urlencoded; charset=utf-8'
 */
service.adornData = (data = {}, openDefaultData = true, contentType = 'json') => {
    var defaults = {
        't': new Date().getTime()
    }
    data = openDefaultData ? merge(defaults, data) : data
    return contentType === 'json' ? JSON.stringify(data) : qs.stringify(data)
}
export default service;
